var _globalObject = {}
//全局定时器:人员计数
_globalObject.showCountInterTime = setInterval(function(){ showCount() }, 50);

//查询条件过滤器
function filter(node) {
    return (node.level !== 0);//非根节点
}

//实时查询
//mc,allOrg,查询api接口
function search(sid, domId, apiUrl){
	//关键字
	var str = $.trim($('#'+sid).val());
	//要查询的树对象
	var zTree = $.fn.zTree.getZTreeObj(domId);
	//指定树对象下面的所有非根节点
	var myNodes = zTree.getNodesByFilter(filter, false);
	if(str === ""){
		if(myNodes.length>0){
			//全部show
			//ztree对象内置的show方法
			zTree.showNodes(myNodes);
			
			$.each(myNodes, function(j,f) {
				//折叠
				//指定节点，关闭，只影响该节点，不设置焦点，不触发回调事件
				zTree.expandNode(f, false, false, false, false);
			});
		}
		return false;
	}else{
		//全部hide
		//ztree对象内置的hide方法
		zTree.hideNodes(myNodes);
		
		$.ajax({
			//url?mc=%7d%%6e%%ef%&t=1748861244056
			url: apiUrl+"?"+sid+"="+encodeURI(encodeURI(str))+"&t=" + new Date().getTime(),
			dataType: "json",
			async:true,
			success: function(data) {
				//json字符串转化为对象
				if(typeof data === 'string'){
					data = eval('('+data+')');
				}
				if(data.length>0){
					//重组json
					var jsons = reBuildJson(data,[]);
					if(jsons.length>0){
						//遍历查询结果
						$.each(jsons, function(i,e) {
							var id = e.id;
							//如果有多个同样的ID，全部都取出来
							var treeNodes = zTree.getNodesByParam('id',id);
							if(treeNodes.length>0){
								$.each(treeNodes, function(j,f) {
									//逐个展现
									zTree.showNode(f);
									//如果是部门就展开
									if(e.type=='folder'){
										//展开路径
										//指定节点，打开，只影响该节点，不设置焦点，不触发回调事件
										zTree.expandNode(f, true, false, false, false);
									}
								});
							}
						});
						_globalObject.searchContent = str;
						$('#'+sid).trigger('propertychange');
					}else{
						console.log('json重组异常-data >>> ', data);
					}
					//window.clearInterval(_globalObject.searchInterTime[sid]);
				}
			}
		})
		return false;
	}
}

//数据联动
//这里的参数是dom的ID，例如<ul id="allOrg" class="ztree"></ul>
//如果没有指定ID，则取当前active的tab项下面的ID
function dataRelation(treeId){
	if(!treeId){
		var activeObj = $('.tw-tabs-nav .tw-nav-item.tw-active');
		//取默认打开了的tab项下面的ztree的ID
		if(activeObj.length>0){
			treeId = $('.tw-tab-panel[data-tab-idx='+activeObj.attr('data-tab-idx')+']').find('ul.ztree').attr('id');
		}
		//若没有已打开的tab则默认为全局的mainNodeId
		//这个值在初始化tab的时候生成，一般情况不出现bug都是有默认打开tab的，以防bug设置此ID
		if(!treeId){
			treeId = _globalObject.mainNodeId;
		}
	}
	var zTree = $.fn.zTree.getZTreeObj(treeId);
	//全部取消
	zTree.checkAllNodes(false);
	//取已选取select内容
	var options = $('#oldSelect option');
	$.each(options, function(i,e) {
		var id = e.value;
		//如果有多个同样的ID，全部都取出来
		var treeNodes = zTree.getNodesByParam('id',id);
		if(treeNodes.length>0){
			$.each(treeNodes, function(j,f) {
				//指定节点，勾选，父子联动，不触发回调事件
				zTree.checkNode(f, true, true, false);
			});
		}
	});
}

//checkbox点选回调事件
//参数：event:标准的js event对象
//treeId：ztree对象内部ID
//treeNode：被操作的节点json对象
function nodeOnCheck(e, treeId, treeNode){
	var zTree = $.fn.zTree.getZTreeObj(treeId);
	//个人名称直接添加到select
	if(treeNode.type=='file'){
		//select option切换
		toggleSelectOption(treeNode.id, treeNode.name);
		var id = treeNode.id;
		//如果有多个同样的ID，全部都取出来
		var treeNodes = zTree.getNodesByParam('id',id);
		if(treeNodes.length>1){
			for (var i=0, l=treeNodes.length; i < l; i++) {
				//指定节点，根据此次操作后的勾选状态是否勾选，父子联动，不触发回调事件
				zTree.checkNode(treeNodes[i], treeNode.checked, true, false);
			}
		}
	}
	//判断部门是否选中遍历子元素
	if(treeNode.type=='folder'){
		//是否有子元素的判断
		if(treeNode.children && treeNode.children.length>0){
			//取所有人员子元素
			var nodes = zTree.getNodesByParam('type','file',treeNode);
			//遍历人员
			for (var i=0, l=nodes.length; i < l; i++) {
				//判断是否隐藏为了查询后的check操作不影响到已隐藏的人员
				//只check不隐藏的元素
				if(!nodes[i].isHidden){
					var id = nodes[i].id;
					var name = nodes[i].name;
					//先操作select option
					if(treeNode.checked){
						addSelectOption(id, name);
					}else{
						delSelectOption(id);
					}
					//如果有多个同样的ID，全部都取出来
					var treeNodes = zTree.getNodesByParam('id',id);
					if(treeNodes.length>1){
						for (var j=0, k=treeNodes.length; j < k; j++) {
							//指定节点，根据此次操作后的勾选状态是否勾选，父子联动，不触发回调事件
							zTree.checkNode(treeNodes[j], treeNode.checked, true, false);
						}
					}
				}
			}
		}
	}
}

//文字点击回调事件
//参数：event:标准的js event对象
//treeId：ztree对象内部ID
//treeNode：被操作的节点json对象
function nodeOnClick(event, treeId, treeNode){
	var zTree = $.fn.zTree.getZTreeObj(treeId);
	//个人名称直接添加到select并选中，联动父级
	if(treeNode.type=='file'){
		//select option切换
		toggleSelectOption(treeNode.id, treeNode.name);
		var id = treeNode.id;
		//如果有多个同样的ID，全部都取出来
		var treeNodes = zTree.getNodesByParam('id',id);
		if(treeNodes.length>0){
			for (var i=0, l=treeNodes.length; i < l; i++) {
				//指定节点，勾选切换，父子联动，不触发回调事件
				zTree.checkNode(treeNodes[i], null, true, false);
			}
		}
	}
	//部门名称仅展开或关闭
	if(treeNode.type=='folder'){
		//指定节点，打开切换，只影响该节点，不设置焦点，不触发回调事件
		zTree.expandNode(treeNode, null, false, false, false);
	}
}

//下拉菜单数据操作
function toggleSelectOption(id,name){
	//不存在或不重复的id才添加
	if($(".tw-usertree-select").find("[data-id='"+id+"']").length<1){
		var _html = '<li data-id='+ id +'><span>'+ name +'</span> <i class="tw-usertree-del tw-icon-times-circle" onclick="deltree(this)"></i></li>';
		$(".tw-usertree-list").append(_html);
		var oldSelect=document.getElementById('oldSelect');
		oldSelect.options.add(new Option(name,id));
	}else{
		//已存在的删除
		delSelectOption(id);
	}
}
function addSelectOption(id,name){
	//不重复的id才添加
	if($(".tw-usertree-select").find("[data-id='"+id+"']").length<1){
		var _html = '<li data-id='+ id +'><span>'+ name +'</span> <i class="tw-usertree-del tw-icon-times-circle" onclick="deltree(this)"></i></li>';
		$(".tw-usertree-list").append(_html);
		var oldSelect=document.getElementById('oldSelect');
		oldSelect.options.add(new Option(name,id));
	}
}
function delSelectOption(id){
	//存在
	if($(".tw-usertree-select").find("[data-id='"+id+"']").length>0){
		$(".tw-usertree-select li[data-id='"+id+"']").remove();
		$(".tw-usertree-select option[value='"+id+"']").remove();
	}
}

//被选中项的onclick删除事件
function deltree(o){
	var $this = $(o);
	var id = $this.parent("li").attr('data-id');
	//先操作select option
	delSelectOption(id);
	//再更新每个tab下的ztree
	$.each(_globalObject.groupList, function(i,e) {
		var zTree = $.fn.zTree.getZTreeObj(e.domId);
		//如果有多个同样的ID，全部都取出来
		var treeNodes = zTree.getNodesByParam('id',id);
		if(treeNodes.length>0){
			$.each(treeNodes, function(j,f) {
				//指定节点，勾选取消，父子联动，不触发回调事件
				zTree.checkNode(f, false, true, false);
			});
		}
	});
}

//清除全部
function delAll(){
	//先清空select option
	var obj=document.getElementById('oldSelect');
	obj.options.length=0;
	$(".tw-usertree-list").empty();
	
	//取消勾选每个tab下面的全部节点
	$.each(_globalObject.groupList, function(i,e) {
		var zTree = $.fn.zTree.getZTreeObj(e.domId);
		//全部取消
		zTree.checkAllNodes(false);
	});
};

/**
 * 重组json，测试阶段，最终要修改接口json格式，减少运算时间
 * @param {Object} jsons
 * @param {Array} arr
 * @param {String} pid
 */
function reBuildJson(jsons, arr, pid){
	return jsons;
	/*
	if(jsons.length>0){
		$.each(jsons, function(i,e) {
			if(e.classes=="folder"){
				if(e.children && e.children.length>0){
					arr.push({
						id:e.id,
						pId:pid?pid:null,
						name:$(e.text)[1].innerHTML,
						open:e.expanded?e.expanded:false,
						type:"folder",
						chkDisabled:e.chkDisabled?e.chkDisabled:false
					});
					arr = reBuildJson( e.children, arr, e.id );
				}else{
					arr.push({
						id:e.id,
						pId:pid?pid:null,
						name:$(e.text)[1].innerHTML,
						open:e.expanded?e.expanded:false,
						type:"folder",
						chkDisabled:true
					});
				}
			}
			if(e.classes=="file"){
				arr.push({
					id:e.id,
					pId:pid?pid:null,
					name:$(e.text)[1].innerHTML,
					type:"file"
				});
			}
		});
		return arr;
	}else{
		return arr;
	}*/
}

/**
 * 分组信息创建tab标签组+滚动条初始化
 * @param data 获取分组信息接口返回的数据
 */
function createTabsHtml(data){
	//tab头部,身体,搜索
	var html='', body='', search='';
	//即时查询用的定时器数组
	//设为数组，方便以后如果有多个查询框的拓展
	_globalObject.searchInterTime = [];
	//遍历每个tab
	$.each(data, function(i,e){
		//组成头部标签
		html += '<li class="tw-nav-item"><a href="javascript: void(0)">'+e.name+'</a></li>';
		//组成搜索框，绑定时器
		if(e.searchOption!==null){
			search = '<div class="tw-usertree-search">'+
	            			'<input type="text" id="'+e.searchOption.domId+'" value="" class="tw-form-text" />'+
	            			'<button type="button" class="tw-btn-primary" onclick="search(\''+e.searchOption.domId+'\',\''+e.domId+'\',\''+e.searchOption.apiUrl+'\');"><i class="tw-icon-search"></i> 搜索</button>'+
	            		'</div>';
	            		
	        //绑定即时查询定时器，如果查询内容发生变化才执行查询
			_globalObject.searchInterTime[e.searchOption.domId] = window.setInterval(function() {
				var obj = $( '#'+e.searchOption.domId );
				if(obj.length>0){
					/*定时器任务*/
					/*var val = obj.val();
					if ( _globalObject.searchContent != val ) {
						_globalObject.searchContent = val;
						var sid = e.searchOption.domId, domId = e.domId, apiUrl = e.searchOption.apiUrl;
						window.search(sid, domId, apiUrl);
					}*/
					/*绑定事件方式*/
					obj.unbind("input propertychange");
					obj.bind("input propertychange", function(){
						var val = obj.val();
						if ( _globalObject.searchContent != val ) {
							_globalObject.searchContent = val;
							var sid = e.searchOption.domId, domId = e.domId, apiUrl = e.searchOption.apiUrl;
							window.search(sid, domId, apiUrl);
						}
					})
					window.clearInterval(_globalObject.searchInterTime[e.searchOption.domId]);
				}
			}, 10);
		}
		//组成tab content, ztree的容器，必须在tree初始化之前生成，domId唯一
		body += '<div class="tw-tab-panel">'
	            	+'<div class="tw-panel-cnt">'
	            		+'<div class="JS_treeBox JS_scroll">'+search
	            			+'<ul id="'+e.domId+'" class="ztree"></ul>'
	            		+'</div>'
	            	+'</div>'
	            +'</div>';
	    //是否根节点，该字段是自定义在json内的，根tree对象内部生成的level不是同一个
	    if(e.level==0){
		    //存储主节点ID
		    _globalObject.mainNodeId = e.domId;
	    }
	    search = '';
	})
	
	//获取设备类型
	_globalObject.isMobiles = isMobile();
	
	//PC端要接上常用组编辑按钮
	if(!_globalObject.isMobiles){
		html += '<li class="tw-nav-act"><span class="tw-btn-primary tw-btn-sm" onclick="editGroup()">常用组</span></li>';
	}
	
	//tab头部生成
	$('.tw-tabs-nav').html(html);
	//tab身体生成
	$('.tw-tabs-bd').html(body);
	//创建tab效果，依赖于common-ui.js
	$('.tw-usertree-tabs').tabs();
	
	//获取窗口大小，设置滚动窗口的高度，减去的数值其实就是layer窗口内除了滚动区域以外的高度
	_globalObject.pageSize = getPageSize();
	var tmpHeight =  _globalObject.pageSize[3]-130;
	tmpHeight = tmpHeight<100?100:tmpHeight;
	tmpHeight = tmpHeight>400?400:tmpHeight;
	
	//生成滚动条效果
	$('.JS_scroll').slimScroll({height: tmpHeight+'px'});
}

//Url加参数
function addUrlPara(url, name, value) {
    var currentUrl = url;
    if (/\?/g.test(currentUrl)) {
        if (/name=[-\w]{4,25}/g.test(currentUrl)) {
            currentUrl = currentUrl.replace(/name=[-\w]{4,25}/g, name + "=" + value);
        } else {
            currentUrl += "&" + name + "=" + value;
        }
    } else {
        currentUrl += "?" + name + "=" + value;
    }
    return currentUrl;
}

//更新select选项数目
function showCount(){
	if($('#oldSelect').length>0){
		var countNum = document.getElementById('oldSelect').options.length;
		$("#countNum").text(countNum);
	}
};

//是否移动端设备
function isMobile(){
	var ua = navigator.userAgent;
	var ipad = ua.match(/(iPad).*OS\s([\d_]+)/),//苹果平板
	    isIphone = !ipad && ua.match(/(iPhone\sOS)\s([\d_]+)/),//苹果手机
	    isAndroid = ua.match(/(Android)\s+([\d.]+)/),//安卓系统
	    isBB = ua.match(/BB/i),//黑莓
	    isPlayBook = ua.match(/PlayBook/i),//黑莓平板
	    isKindleFire = ua.match(/KFAPWI/i),//亚马逊
	    isNOKIA = ua.match(/NOKIA/i),//诺基亚
	    isMobiles = ipad || isIphone || isAndroid || isBB || isPlayBook || isKindleFire || isNOKIA;
	if( isMobiles ){
		return true;
	}else{
		return false;
	}
}

//获取设备屏幕尺寸
function getPageSize(){var xScroll,yScroll;if(window.innerHeight&&window.scrollMaxY){xScroll=window.innerWidth+window.scrollMaxX;yScroll=window.innerHeight+window.scrollMaxY}else{if(document.body.scrollHeight>document.body.offsetHeight){xScroll=document.body.scrollWidth;yScroll=document.body.scrollHeight}else{xScroll=document.body.offsetWidth;yScroll=document.body.offsetHeight}}var windowWidth,windowHeight;if(self.innerHeight){if(document.documentElement.clientWidth){windowWidth=document.documentElement.clientWidth}else{windowWidth=self.innerWidth}windowHeight=self.innerHeight}else{if(document.documentElement&&document.documentElement.clientHeight){windowWidth=document.documentElement.clientWidth;windowHeight=document.documentElement.clientHeight}else{if(document.body){windowWidth=document.body.clientWidth;windowHeight=document.body.clientHeight}}}if(yScroll<windowHeight){pageHeight=windowHeight}else{pageHeight=yScroll}if(xScroll<windowWidth){pageWidth=xScroll}else{pageWidth=windowWidth}arrayPageSize=new Array(pageWidth,pageHeight,windowWidth,windowHeight);return arrayPageSize}